Single processor architectures are well-suited for some tasks, but are unable to provide the level of performance required by some high-performance systems. Parallel processing based on general-purpose processors can attain an increased level of performance. Thus, using systems with multiple processing elements is one approach for achieving increased performance. There is a wide variety of applications that demand a high level of performance. Such applications can include networking, image processing, simulations, and signal processing, to name a few. In addition to computing power, flexibility is also important for adapting to ever-changing business needs and technical situations.
Multiple core processor designs enable two or more cores to run simultaneously, with a combined throughput that can exceed the processing power of a single-core processor. In accordance with implications of Moore's Law, multiple core capacity allows for an increase in capability of electronic devices without hitting boundaries that would otherwise be encountered if attempting to implement similar processing power using a single core processor.
In multiple processing element systems, the processing elements communicate with each other, exchanging and combining data to produce intermediate and/or final outputs. Each processing element can have a variety of registers to support program execution and storage of intermediate data. Additionally, registers such as stack pointers, return addresses, and exception data can also be present to enable execution of complex routines and support debugging of computer programs running on the multiple processing elements. Furthermore, arithmetic units can provide mathematical functionality, such as addition, subtraction, multiplication, and division.
One architecture for use with multiple processing elements is a mesh network. A mesh network is a network topology containing multiple interconnected processing elements. The processing elements work together to distribute and process data. This architecture allows for a degree of parallelism for processing data, enabling increased performance. Additionally, the mesh network allows for a variety of component configurations.
Some applications demand reconfigurability. Reconfigurability is an important attribute in many processing applications, as reconfigurable devices are extremely efficient for certain types of processing tasks. In certain circumstances, the main reason that cost and performance advantages of reconfigurable devices exist is that reconfigurable logic enables program parallelism, allowing for multiple computation operations to occur simultaneously for the same program. Meanwhile, conventional processors are often limited by instruction bandwidth and execution restrictions. Typically, the high-density properties of reconfigurable devices come at the expense of the high-diversity property that is inherent in microprocessors. Microprocessors have evolved to a highly-optimized configuration that can provide cost/performance advantages over reconfigurable arrays for certain tasks with high functional diversity. However, there are many tasks for which a conventional microprocessor may not be the best design choice. An architecture supporting configurable interconnected processing elements can be a viable alternative in certain applications.
The emergence of reconfigurable computing has enabled a higher level of both flexibility and performance of computer systems. Reconfigurable computing combines the high speed of application-specific integrated circuits with the flexibility of programmable processors. This provides much-needed functionality and power to enable the technology used in many current and upcoming fields.